package com.es.designmode.interpreter;

import java.util.ArrayList;
import java.util.List;

/**
 * 解释器模式
 * 给定一个语言，定义它的文法中的一种表示，并定义一个解释器，这个解释器使用该表示来解释语言中的句子
 * <p>
 * 如果一种特定类型的问题发生的频率足够高，那么可能就值得将该问题的各个实例表述为一个简单语言中的句子。
 * 这样就可以构建一个解释器，该解释器通过解释这些句子解决该问题
 * <p>
 * 解释器模式为文法中的每一条规则至少定义了一个类，难以维护
 *
 * @author Will
 */
public class ClientSide {

    public static void main(String[] args) {

        Context context = new Context();
        List<AbstractExpression> list = new ArrayList<AbstractExpression>();
        list.add(new TerminalExpression());
        list.add(new NonterminalExpression());
        list.add(new TerminalExpression());
        list.add(new TerminalExpression());

        for (AbstractExpression exp : list) {
            exp.interpret(context);
        }
    }
}
